package com.example.demo.lunar;

import com.example.demo.lunar.entity.SolarTermInfo;
import com.example.demo.lunar.utils.LunarDateUtil;
import com.nlf.calendar.JieQi;
import com.nlf.calendar.Lunar;
import com.nlf.calendar.Solar;

import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;

/**
 * @author LHH
 * @date 2025/3/11
 */
public class LunarMonthExample {
    public static void main(String[] args) {


        /**
         * 指定年份和月份
         */
//        int year = 2025;
//        int month = 04; // 3 表示三月
//
//        // 获取该月的第一天和最后一天
//        Calendar calendar = Calendar.getInstance();
//        calendar.set(Calendar.YEAR, year);
//        calendar.set(Calendar.MONTH, month - 1); // 月份从 0 开始，所以要减 1
//        calendar.set(Calendar.DAY_OF_MONTH, 1);
//        Date firstDay = calendar.getTime();
//
//        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
//        Date lastDay = calendar.getTime();
//
//        // 遍历该月的每一天并输出农历信息
//        DateTime currentDate = DateUtil.date(firstDay);
//        LinkedList<String> objects = new LinkedList<>();
//        while (!currentDate.isAfter(lastDay)) {
//            Lunar lunar = Lunar.fromDate(currentDate);
//            String dayInChinese = lunar.getDayInChinese();
//            if (StringUtils.isNotBlank(lunar.getJieQi())) {
//                dayInChinese =  lunar.getJieQi();
//            }
//            objects.add(dayInChinese);
////            System.out.println("公历: " + currentDate + "，农历: " + dayInChinese);
//            currentDate = currentDate.offset(DateField.DAY_OF_MONTH, 1);
//        }
//        System.out.println(objects);

        /**
         *  指定年份的二十四节气(农历)
         */
//        System.out.println("===== 2025-01-28（2024农历年） =====");
//        Date date1 = new Date("2025-01-28");
//        List<SolarTermInfo> terms2024 = LunarDateUtil.getLunarYearSolarTerms(date1);
//        for (SolarTermInfo term : terms2024) {
//            System.out.printf("%s: 公历%d-%02d-%02d 农历%s%s%s%n",
//                    term.getName(),
//                    term.getSolarYear(), term.getSolarMonth(), term.getSolarDay(),
//                    term.getLunarYearZhi(), term.getLunarMonth(), term.getLunarDay());
//        }
//
//        System.out.println("\n===== 2025-01-29（2025农历年） =====");
//        Date date2 = new Date("2025-01-29");
//        List<SolarTermInfo> terms2025 = LunarDateUtil.getLunarYearSolarTerms(date2);
//        for (SolarTermInfo term : terms2025) {
//            System.out.printf("%s: 公历%d-%02d-%02d 农历%s%s%s%n",
//                    term.getName(),
//                    term.getSolarYear(), term.getSolarMonth(), term.getSolarDay(),
//                    term.getLunarYearZhi(), term.getLunarMonth(), term.getLunarDay());
//        }
//
//        System.out.println("\n===== 2026-02-17（2026农历年） =====");
//        Date date3 = new Date("2026-02-17");
//        List<SolarTermInfo> terms2026 = LunarDateUtil.getLunarYearSolarTerms(date3);
//        for (SolarTermInfo term : terms2026) {
//            System.out.printf("%s: 公历%d-%02d-%02d 农历%s%s%s%n",
//                    term.getName(),
//                    term.getSolarYear(), term.getSolarMonth(), term.getSolarDay(),
//                    term.getLunarYearZhi(), term.getLunarMonth(), term.getLunarDay());
//        }
//        // 验证节气数量（应为24个）
//        System.out.println("\n2024农历年节气数量: " + terms2024.size());
//        System.out.println("2025农历年节气数量: " + terms2025.size());
//        System.out.println("2026农历年节气数量: " + terms2026.size());


        /**
         *  指定年份的二十四节气(阳历)
         */
        // 获取2024年的所有节气
        System.out.println("===== 2024年节气 =====");
        List<SolarTermInfo> terms2024 = LunarDateUtil.getSolarTermsBySolarYear(new Date());
        for (SolarTermInfo term : terms2024) {
            System.out.printf("%s: 公历%d-%02d-%02d (第%d天) 农历%s%s%s%n",
                    term.getName(),
                    term.getSolarYear(), term.getSolarMonth(), term.getSolarDay(),
                    term.getDayOfYear(),
                    term.getLunarYearZhi(), term.getLunarMonth(), term.getLunarDay());
        }

        // 验证节气数量
        System.out.println("\n2024年节气数量: " + terms2024.size());
    }


}
